package com.jdy.haoduoaiteacher;

import android.annotation.TargetApi;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;

/**
 * Created by zhaijikui on 2015/12/7 0007.
 */
public class FileUtils {

  // public static File createDir(String path) {
  // File dir = new File(path);
  // if (!dir.exists()) {
  // if (Environment.getExternalStorageState().equals(
  // Environment.MEDIA_MOUNTED)) {
  // dir.mkdirs();
  // }
  // }
  // return dir;
  // }
  //
  // public static void deleteDir(String path) {
  // File dir = new File(path);
  // if (dir == null || !dir.exists() || !dir.isDirectory())
  // return;
  //
  // for (File file : dir.listFiles()) {
  // if (file.isFile())
  // file.delete();
  // else if (file.isDirectory())
  // deleteDir(path);
  // }
  // dir.delete();
  // }
  //
  // public static void deleteDirContent(String path) {
  // File dir = new File(path);
  // if (dir == null || !dir.exists() || !dir.isDirectory())
  // return;
  //
  // for (File file : dir.listFiles()) {
  // if (file.isFile())
  // file.delete();
  // else if (file.isDirectory())
  // deleteDirContent(file.getPath());
  // }
  // }
  //
  // public static boolean fileIsExists(String path) {
  // try {
  // File f = new File(path);
  // if (!f.exists()) {
  // return false;
  // }
  // } catch (Exception e) {
  //
  // return false;
  // }
  // return true;
  // }
  //
  // public static void saveBitmapFile(Bitmap bitmap, String path) {
  // File file = new File(path);// 将要保存图片的路径
  // try {
  // FileOutputStream out = new FileOutputStream(file);
  // bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
  // out.flush();
  // out.close();
  // } catch (IOException e) {
  // e.printStackTrace();
  // }
  // }

  /**
   * 专为Android4.4设计的从Uri获取文件绝对路径，以前的方法已不好使
   */

  @TargetApi(Build.VERSION_CODES.KITKAT)
  public static String getPath(final Context context, final Uri uri) {

    final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;

    // DocumentProvider
    if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
      // ExternalStorageProvider
      if (isExternalStorageDocument(uri)) {
        final String docId = DocumentsContract.getDocumentId(uri);
        final String[] split = docId.split(":");
        final String type = split[0];

        if ("25DA-14E4".equalsIgnoreCase(type)) {
          return Environment.getExternalStorageDirectory() + "/" + split[1];
        } else if ("primary".equalsIgnoreCase(type)) {
          return Environment.getExternalStorageDirectory() + "/" + split[1];
        }

      }
      // DownloadsProvider
      else if (isDownloadsDocument(uri)) {

        final String id = DocumentsContract.getDocumentId(uri);
        final Uri contentUri = ContentUris
            .withAppendedId(Uri.parse("content://downloads/public_downloads"),
                Long.valueOf(id));

        return getDataColumn(context, contentUri, null, null);
      }
      // MediaProvider
      else if (isMediaDocument(uri)) {
        final String docId = DocumentsContract.getDocumentId(uri);
        final String[] split = docId.split(":");
        final String type = split[0];

        Uri contentUri = null;
        if ("image".equals(type)) {
          contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        } else if ("video".equals(type)) {
          contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
        } else if ("audio".equals(type)) {
          contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        }

        final String selection = "_id=?";
        final String[] selectionArgs = new String[] { split[1] };

        return getDataColumn(context, contentUri, selection, selectionArgs);
      }
    }
    // MediaStore (and general)
    else if ("content".equalsIgnoreCase(uri.getScheme())) {
      return getDataColumn(context, uri, null, null);
    }
    // File
    else if ("file".equalsIgnoreCase(uri.getScheme())) {
      return uri.getPath();
    }

    return null;
  }

  /**
   * Android下获取包路径（Package），如果路径不存在则创建
   * 
   * @param context
   *          上下文环境
   * @return 软件的包路径
   */
  // public static String getPackagePath(Context context) {
  // String packagePath = "";
  // if
  // (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
  // File packageFile = new File(Environment.getExternalStorageDirectory(),
  // context.getPackageName());
  // if (!packageFile.exists()) {
  // if (packageFile.mkdirs()) {
  // packagePath = packageFile.getAbsolutePath();
  // }
  // } else {
  // packagePath = packageFile.toString();
  // }
  // }
  // return packagePath;
  // }

  private static boolean isDownloadsDocument(Uri uri) {
    return "com.android.providers.downloads.documents".equals(uri
        .getAuthority());
  }

  /**
   * Get the value of the data column for this Uri. This is useful for
   * MediaStore Uris, and other file-based ContentProviders.
   * 
   * @param context
   *          The context.
   * @param uri
   *          The Uri to query.
   * @param selection
   *          (Optional) Filter used in the query.
   * @param selectionArgs
   *          (Optional) Selection arguments used in the query.
   * @return The value of the _data column, which is typically a file path.
   */
  private static String getDataColumn(Context context, Uri uri,
      String selection, String[] selectionArgs) {

    Cursor cursor = null;
    final String column = "_data";
    final String[] projection = { column };

    try {
      cursor = context.getContentResolver().query(uri, projection, selection,
          selectionArgs, null);
      if (cursor != null && cursor.moveToFirst()) {
        final int column_index = cursor.getColumnIndexOrThrow(column);
        return cursor.getString(column_index);
      }
    } finally {
      if (cursor != null)
        cursor.close();
    }
    return null;
  }

  /**
   * @param uri
   *          The Uri to check.
   * @return Whether the Uri authority is ExternalStorageProvider.
   */
  private static boolean isExternalStorageDocument(Uri uri) {
    return "com.android.externalstorage.documents".equals(uri.getAuthority());
  }

  /**
   * @param uri
   *          The Uri to check.
   * @return Whether the Uri authority is MediaProvider.
   */
  private static boolean isMediaDocument(Uri uri) {
    return "com.android.providers.media.documents".equals(uri.getAuthority());
  }

  /**
   * 将图片写入sd卡
   * 
   */
  // public static void inputPicTosdcard(Bitmap bitmap, String picName) {
  // if
  // (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
  // ByteArrayOutputStream baos = new ByteArrayOutputStream();
  // bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
  //
  // File SDFile = Environment.getExternalStorageDirectory();
  // File destDir = new File(SDFile.getAbsolutePath() + "/qqcyData/");// 文件目录
  //
  // if (!destDir.exists()) {// 判断目录是否存在，不存在创建
  // destDir.mkdir();// 创建目录
  // }
  // File pic = new File(destDir.getPath() + File.separator + picName);
  // if (!pic.exists()) {
  // try {
  // pic.createNewFile();// 创建文件
  // FileOutputStream outputStream = new FileOutputStream(pic, true);
  // outputStream.write(baos.toByteArray());// 写入内容
  // outputStream.close();// 关闭流
  // } catch (IOException e) {
  // e.printStackTrace();
  // }
  // }
  // }
  // }

}
